package com.qfedu.mtl.service.impl;

import com.qfedu.mtl.dao.ManagerDao;
import com.qfedu.mtl.dao.impl.ManagerDaoImpl;
import com.qfedu.mtl.dto.LoginDto;
import com.qfedu.mtl.entity.Managers;
import com.qfedu.mtl.entity.Menus;
import com.qfedu.mtl.query.managerQuery;
import com.qfedu.mtl.service.ManagerService;
import com.qfedu.mtl.service.RoleService;
import com.qfedu.mtl.util.StrUtil;
import com.qfedu.mtl.util.page.Pager;

import java.util.ArrayList;
import java.util.List;

/**
 * @version v1.0
 * @Date 2023/9/25 14:50
 * @Author DARKER
 * @Email 1402216045@qq.com
 */
public class ManagerServiceImpl implements ManagerService {
    ManagerDao managerDao = new ManagerDaoImpl();
    RoleService roleService = new RoleServiceImpl();
    @Override
    public Managers login(LoginDto loginDto) {
        //1.根据用户名查询是否存在
        Managers manager = managerDao.selectByUsername(loginDto.getUsername());
        //2.比较密码
        if(manager!=null){
            //加密之后比较
            if (StrUtil.md5Encode(loginDto.getPassword()).equals(manager.getLoginPwd())) {
                return manager;
            }
            if (manager.getLoginPwd().equals(loginDto.getPassword()) ) {
                return manager;
            }
        }
        return null;
    }

    @Override
    public int sava(Managers dto) {
        //用户名重名判断
        int row = managerDao.checkInfoRepeat(dto);
        if (row>=1){
            return -1;
        }
        //对密码加密
        dto.setLoginPwd(StrUtil.md5Encode(dto.getLoginPwd()));

        return managerDao.insert(dto);
    }

    /**
     * 分页
     * @param page
     * @param size
     * @param query
     * @return
     */
    @Override
    public Pager<Managers> findPageQuery(Integer page, Integer size, managerQuery query) {
        //查询到所有符合条件的管理员列表
        List<Managers> managersList = managerDao.pageByQuery(page,size,query);
        Integer total = managerDao.selectCountQuery(query);
        //查询符合条件的管理员的数量
        Pager<Managers> pagers = new Pager<>(managersList,page,size,total);
        return pagers;
    }

    /**
     * 通过后台用户ID找到所属角色的菜单
     * @param mgrId
     * @return
     */
    @Override
    public List<Menus> findSelfMenus(Integer mgrId) {
        List<Menus> tree = new ArrayList<>(); //返回的树形集合
        List< Menus > all =   managerDao.selectManagerAllMenus( mgrId ); //1. 查询全部的数据（不用区分层级）
        for (Menus menu : all) { //2. 过滤出一级菜单,添加到返回集合。
            //判断是否是一级
            if(menu.getParentMenuCode().equals("00")){
                tree.add( menu ); //添加到返回集合
            }else{
                //3. 把非一级菜单添加到 上级的 children集合中。
                for ( Menus p : all ){
                    //判断p是否是你的父级  自己 ParentMenuCode 是否 等于 别人的 MenuCode 如果相对 别人就是你的上级
                    if( p.getMenuCode().equals( menu.getParentMenuCode() )  ){
                        //添加到集合
                        p.getChildren().add(  menu );
                    }
                }
            }
        }
        return tree;
    }

    /**
     * 通过ID号编辑
     * @param managers
     * @return
     */
    @Override
    public int editById(Managers managers) {
        //修改managers表的信息
        int row = managerDao.update(managers);
        //修改角色信息
        if(managerDao.selectExistMgrIdInTbRoles(managers.getMgrId())){
            //存在角色信息，修改
            managerDao.updateManagerRoleByManagerId(managers.getMgrId(),managers.getRoleName());
        }else{
            //不存在插入
            managerDao.insertMgrBymgrId(managers.getMgrId(),managers.getRoleName());
        }
        return row;
    }

    /**
     * 通过id删除
     * @param id
     * @return
     */
    @Override
    public int delById(Integer id) {
        return managerDao.deleteById(id);

    }

    @Override
    public void delByIdBatch(List<Integer> ids) {
        managerDao.deleteBatch(ids);
    }


}



